/**
 * 将下划线命名转换为小驼峰命名
 * @param {string} str - 下划线格式的字符串
 * @returns {string} - 小驼峰格式的字符串
 */
const toCamelCase = (str) => {
  return str.replace(/_([a-z])/g, (match, letter) => letter.toUpperCase());
};

/**
 * 将对象的键从下划线命名转换为小驼峰命名
 * @param {Object} obj - 要转换的对象
 * @returns {Object} - 转换后的对象
 */
const keysToCamelCase = (obj) => {
  if (obj === null || obj === undefined) {
    return obj;
  }

  // 如果是数组，递归处理每个元素
  if (Array.isArray(obj)) {
    return obj.map(item => keysToCamelCase(item));
  }

  // 如果不是对象，直接返回
  if (typeof obj !== 'object') {
    return obj;
  }

  // 处理特殊对象类型：Date、Buffer、RegExp等，直接返回
  if (obj instanceof Date || obj instanceof Buffer || obj instanceof RegExp) {
    return obj;
  }

  // 转换对象的键
  const camelCaseObj = {};
  for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
      const camelKey = toCamelCase(key);
      camelCaseObj[camelKey] = keysToCamelCase(obj[key]);
    }
  }

  return camelCaseObj;
};

module.exports = {
  toCamelCase,
  keysToCamelCase
};

